package com.atguigu.gmall.cart.controller.api;

import com.atguigu.gmall.cart.service.CartInfoService;
import com.atguigu.gmall.common.constant.CartConstants;
import com.atguigu.gmall.common.execption.GmallException;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.cart.CartInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/***
 * 购物车控制层
 */
@RestController
@RequestMapping("/api/cart")
public class ApiCartInfoController {

    @Autowired
    private CartInfoService cartInfoService;

    /**
     * 用户登录时合并购物车
     * @param cartInfoList
     * @return
     */
    @PostMapping("/mergeCart")
    public Result mergeCart(@RequestBody List<CartInfo> cartInfoList){
        //1 校验参数
        if(cartInfoList == null || cartInfoList.size() == 0){
            return Result.ok();
        }

        //2 调用业务层方法
        cartInfoService.mergeCart(cartInfoList);

        //3 返回
        return Result.ok();
    }

    /**
     * 取消勾选操作
     * @param id
     * @return
     */
    @PutMapping("/unCheck")
    public Result unCheck(Long id){
        //2 调用业务方法
        cartInfoService.checkOrUncheck(id, CartConstants.CART_UNCHECK);

        //3 返回
        return Result.ok();
    }

    /**
     * 勾选操作
     * @param id
     * @return
     */
    @PutMapping("/check")
    public Result check(Long id) {
        //2 调用业务层方法
        cartInfoService.checkOrUncheck(id, CartConstants.CART_CHECK);

        //3 返回
        return Result.ok();
    }

    /**
     * 删除购物车
     * @param skuId
     * @return
     */
    @DeleteMapping("/remove")
    public Result remove(Long skuId) {
        //1 校验参数
        if (skuId == null) {
            throw new GmallException("参数错误", null);
        }

        //2 调用业务层方法
        cartInfoService.removeByUsernameAndSkuId(skuId);

        //3 返回数据
        return Result.ok();
    }

    /**
     * 查询购物车列表
     *
     * @return
     */
    @GetMapping("/getCartInfo")
    public Result getCartInfo() {
        //1 调用业务层方法
        List<CartInfo> cartInfoList = cartInfoService.listCartInfoByUsername();

        //2 响应数据
        return Result.ok(cartInfoList);
    }

    /**
     * 添加购物车
     *
     * @param skuId
     * @param num
     * @return
     */
    @PostMapping("/saveCart")
    public Result saveCart(Long skuId, Integer num) {
        //1 校验参数
        if (skuId == null && num == null) {
            throw new GmallException("参数错误", null);
        }

        //2 调用业务层方法
        cartInfoService.save(skuId, num);

        //3 响应
        return Result.ok();
    }
}
